<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 必须得用函数表达式声明
        // let fn = ()=>{

        // }

        // 如果只有一个参数 可以省略小括号
        // let fn = a =>{ }
        // 如果没有参数或者有多个参数，小括号不能省略
        // let fn = (a,b)=>{}
        // let fn = ()=>{}


        // 如果js函数中只有一句话，可以省略花括号
        // let fn = ()=>console.log(123);

        // 如果一句话当中是带返回值的，可以省略return
        // let fn = ()=>123;

        // 1. 本身没有this，如果在里面使用this，this指向的它定义时所处在的this。
        // 2. 不能用来做为构造函数使用 不能用new 
        // 3. 没有arguments属性，用...arg扩展运算符代替。
        // 4. 箭头函数使用call apply bind无法改变this指向

        // let name = "123";

        // let abc = "username";

        // 对象简写
        // 属性名和变量名一致时，可以只写一个。
        // 方法去掉function直接 写 "函数名(){}"
        // let obj = {
        //     // name:name
        //     name,
        //     // run:function(){

        //     // }
        //     run(){

        //     },
        //     // abc:123
        //     [abc]:123  //username : 123
        // }

        // // Object.is
        // console.log(Object.is(NaN,NaN));

        // let newObj = Object.assign({},obj,obj2) 
        // {...obj,...obj2}

        // Math.pow 和 **

        // let n = Math.pow(2,3);
        // let n2 = 2**3;

        // console.log(n === n2);


        // 

        // let n2 = 0b110; //二进制
        // let n8 = 0o765; //八进制

        // console.log(n2,n8); //十进制


        // 平方根
        // 2*2 = 4   4 平方根 2
        // 3*3 = 9   9 平方根 3
        // let n  = Math.sqrt(9);
        // console.log(n); //3

        // 立方根
        // 2*2*2 = 8  8的立方根 2

        // let n = Math.cbrt(8);
        // console.log(n); //2

        // Math.hypot()
        // 3*3 = 9 
        // 4*4 = 16
        // 和 25 / 平方根  = 5
        // let n = Math.hypot(3,4);

        // console.log(n);


        // Symbol() 函数执行
        // 返回值
        let s1 = Symbol();

        let obj = {
            a:12,
            [s1] :123,
            // s1:456,
            // [Symbol()]:666 //错误的定义方式
        }


        // // console.log(obj.s1);
        // console.log(obj[s1]);


        for(let n in obj){
            console.log(n);
        }

        // key放到一个数组
        let arr = [...Object.keys(obj),...Object.getOwnPropertySymbols(obj)]


        // console.log(arr);
        // let arr = Object.getOwnPropertySymbols(obj);

        // console.log(arr);

        // console.log(obj[arr[0]]);


        // 表示大整数
        // let n = 123n;

        // console.log(typeof n);
        

    </script>
</body>
</html>